#!/bin/bash
# author: onion
# date: 2025年7月7日15:30:33
# description： 清理分布式表的数据


CK_USERNAME=default
CK_PASSWORD=shsnc!@#
CK_DBNAME=snc_aiops_performance
CLUSTER_NAME="cluster_3shards_1replicas"

CK_CLIEN="clickhouse-client --port 9000 --user ${CK_USERNAME} --password ${CK_PASSWORD} --database ${CK_DBNAME}"

# 获取需要清空的表列表（排除视图）
all_tables=$(${CK_CLIEN} --query "
    SELECT name
    FROM system.tables
    WHERE database = '${CK_DBNAME}'
      AND engine NOT IN ('View', 'MaterializedView')
")
tables_array=($all_tables)

# 生成清空脚本
> truncate_all_tables.sql
echo "-- TRUNCATE all tables in ${CK_DBNAME}" >> truncate_all_tables.sql
echo "-- 排除视图和物化视图" >> truncate_all_tables.sql

for table in "${tables_array[@]}"; do
    echo "TRUNCATE TABLE ${CK_DBNAME}.${table} ON CLUSTER ${CLUSTER_NAME};" >> truncate_all_tables.sql
done

echo "处理特殊表...">> truncate_all_tables.sql
echo "-- 手动处理 v_rum_session 视图" >> truncate_all_tables.sql
echo "-- TRUNCATE TABLE snc_aiops_performance.v_rum_session; -- 视图不能清空" >> truncate_all_tables.sql
echo "OPTIMIZE TABLE snc_aiops_performance.rum_session FINAL;" >> truncate_all_tables.sql

echo "清空脚本已生成到 truncate_all_tables.sql"
echo "执行命令：clickhouse-client --password 'shsnc!@#' -d ${CK_DBNAME} --multiquery < truncate_all_tables.sql"